信号处理中,信号的相关性是两种或两种以上信号分析的常用手段,用于寻找两种信号之间的关联性,例如在医学信号分析中常常用眼电信号与脑电信号做相关性分析来探究两者之间的关系。如今随着计算机的普及与发展以及电子科学技术的进步,常常用一些统计学的手段来处理所采集到的数字信号,也就是离散信号,在时域上用于评估信号相关性的指标是相关系数。皮尔森相关系数(Pearson)的计算公式如下: 同样的,在频域上也有评估两个信号相关的指标,在频域上的相关性一般称为同调性(coherence)。同调性是一个频率的函数,处于0到1之间,作用是评估在特定频段上两个信号的频率线性相关性。同调性的计算方法为: ![在这里插入图片描述](https://img-blog.csdnimg.cn/c9538cd2c9b3481d864b408819266737.png)
由于同调性是关于频谱的函数,因此计算同调性之前需要对信号进行傅里叶变换,变换后得到的信号频率是复数因此上述运算要符合复数运算法则。在matlab中可通过mscohere函数计算信号同调性。下面是利用matlab计算信号的同调性示例,首先准备好需要计算同调性的原始信号: 接着调用mscohere函数得到不同信号之间的同调性: 我们可以看到对角元素就是原始信号的频谱,也可以理解为自己与自己的同调性,以P22与P33为例,两个信号都有两个波峰,而在Coh32或Coh23上的对应频带上也出现了两个峰值,说明信号在这两个频带上具有较高的相关性。以上示例代码如下:
clear, close all
clc
%% initialize parameters
samplerate=1; % in Hz
%%% try different parameters and compare results!!
noverlap=25; % overlapping for 25 data points
nfft=50; % the length of each segement for welch average
% noverlap=50; % overlapping for 50 data points
% nfft=100; % the length of each segement for welch average
% noverlap=0; % overlapping for 0 data point
% nfft=250; % the length of each segement for welch average
% noverlap=0; % overlapping for 0 data point
% nfft=500; % the length of each segement for welch average
%% load and plot pre-defined simulated signal
load('SimSignal.mat')
[M,N] = size(X);
taxis = [1:N]/samplerate;
figure,
for i=1:M
subplot(M,1,i),plot(taxis,X(i,:))
ylabel(['x' num2str(i)])
end
%% estimate and display the coherence between channels using mscohere
figure,
for i=1:M
for j=1:M
if i==j
%%% plot power spectrum of channel i using pwelch's method
[Sxx,F] = pwelch(X(i,:),hamming(nfft),noverlap,nfft,samplerate);
subplot(M,M,(i-1)*M+j),plot(F,Sxx)
title(['P' num2str(i) num2str(j)])
else
[Cxy,F] = mscohere(X(i,:),X(j,:),hamming(nfft),noverlap,nfft,samplerate);
subplot(M,M,(i-1)*M+j),plot(F,Cxy)
title(['Coh' num2str(i) num2str(j)])
end
end
end
然而仅仅通过一次实验就证明两个信号在特定频率上具有同调性显然是不科学的,要通过反复的实验才能下定论,同时也要分析同调性的显著性存在,计算同调性的显著性阈值的方法如下: 其中n代表量测量,α表示置信度,例如在n=19,95%的置信度所需同调性阈值要达到0.1533才能认为是相关的。
|